Many flash-oriented file systems employ a log-structured scheme for writing data on file system volumes. Once data has been written to a NAND flash block, an entire NAND flash block must be erased before a NAND flash page can be rewritten. As such, a copy-on-write policy is applied to any update of information already on the volume, where data is rewritten to a new NAND flash block. However, copy-on-write policy greatly affects write amplification for most solid state drives (SSDs). All SSDs have a write amplification value based on what is currently being written and what was previously written to the SSD. Several factors contribute to write amplification, including techniques used to mitigate read and write disturbances and wear-leveling policies, where user data is regularly moved from aged segments into clean segments. Garbage collection policies further increase write amplification.
Different techniques have been used to decrease write amplification in SSDs. TRIM commands may be issued by an operating system to handle sectors containing invalid data. SSDs that receive TRIM commands can consume the sectors containing invalid data as free space when the NAND flash blocks containing these NAND flash pages are erased instead of copying the invalid data to clean NAND flash pages. Another technique for reducing write amplification includes separating static and dynamic data on the SSD. In general, write amplification is reduced (and SSD performance is increased) when data compression and de-duplication is used to reduce redundant data. However, none of the above-mentioned techniques completely solve the write amplification issues associated with flash-based file systems. What is needed is an approach that significantly reduces write amplification of flash-based file systems without negatively impacting the performance of these systems.